package com.macro.mall.mapper;

import com.macro.mall.model.XhsStore;
import com.macro.mall.model.XhsStoreVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface XhsStoreMapper {

    /**
     * 清空门店表
     */
    void truncateTable();

    /**
     * 批量插入门店信息
     * @param stores 门店列表
     * @return 插入记录数
     */
    int batchInsert(@Param("list") List<XhsStore> stores);

    /**
     * 根据ID查询门店
     * @param id 主键ID
     * @return 门店信息
     */
    XhsStore selectById(Long id);

    /**
     * 查询所有门店
     * @return 所有门店列表
     */
    List<XhsStore> selectAll();

    /**
     * 根据POI ID查询门店
     * @param poiId POI唯一标识
     * @return 门店信息
     */
    XhsStore selectByPoiId(String poiId);


    /**
     * 根据POI ID查询门店
     * @return 门店信息
     */
    XhsStore selectByPhone(String phone);

    /**
     * 根据来源类型和来源ID查询门店
     * @param sourceType 来源类型
     * @param sourceId 来源ID
     * @return 门店列表
     */
    List<XhsStore> selectBySource(@Param("sourceType") Integer sourceType, @Param("sourceId") String sourceId);

    /**
     * 更新门店信息
     * @param store 门店信息
     * @return 更新记录数
     */
    int update(XhsStore store);

    /**
     * 删除门店
     * @param id 主键ID
     * @return 删除记录数
     */
    int delete(Long id);



    List<XhsStoreVo> selectStoresWithDistance(
            @Param("city") String city,
            @Param("longitude") Double longitude,
            @Param("latitude") Double latitude,
            @Param("name") String name,
            @Param("offset") int offset,
            @Param("pageSize") int pageSize
    );


    /**
     * 获取门店对应市信息列表，确保每个市都有门店
     * @return
     */
    List<String> getCityList();

    /**
     * 分页查询门店列表
     * @param offset 偏移量
     * @param size 每页大小
     * @param name 门店名称
     * @param city 城市
     * @param poiId POI ID
     * @param phone 手机号
     * @param noPhone 是否查询未设置手机号的门店
     * @return 门店列表
     */
    List<XhsStore> selectStoreList(
            @Param("offset") int offset,
            @Param("size") int size,
            @Param("name") String name,
            @Param("city") String city,
            @Param("poiId") String poiId,
            @Param("phone") String phone,
            @Param("noPhone") Boolean noPhone
    );

    /**
     * 查询门店总数
     * @param name 门店名称
     * @param city 城市
     * @param poiId POI ID
     * @param phone 手机号
     * @param noPhone 是否查询未设置手机号的门店
     * @return 总数
     */
    int selectStoreCount(
            @Param("name") String name,
            @Param("city") String city,
            @Param("poiId") String poiId,
            @Param("phone") String phone,
            @Param("noPhone") Boolean noPhone
    );

    /**
     * 更新门店手机号
     * @param id 门店ID
     * @param phone 手机号
     * @return 更新记录数
     */
    int updatePhone(@Param("id") Long id, @Param("phone") String phone);

}
